package com.myzl.coal.service.impl;

import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.myzl.coal.domain.Rfid;
import com.myzl.coal.mapper.RfidMapper;
import com.myzl.coal.service.IRfidService;
import com.myzl.common.core.domain.AjaxResult;
import com.myzl.common.enums.DetectionStatusEnum;
import com.myzl.common.utils.DateUtils;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.List;

/**
 * rfid记录Service业务层处理
 *
 * @author myzl
 * @date 2023-06-13
 */
@Service
@Data
@Slf4j
public class RfidServiceImpl extends ServiceImpl<RfidMapper, Rfid> implements IRfidService
{
    private final RfidMapper rfidMapper;

    /**
     * 查询rfid记录
     *
     * @param id rfid记录主键
     * @return rfid记录
     */
    @Override
    public Rfid selectRfidById(Long id)
    {
        return rfidMapper.selectRfidById(id);
    }

    /**
     * 查询rfid记录列表
     *
     * @param rfid rfid记录
     * @return rfid记录
     */
    @Override
    public List<Rfid> selectRfidList(Rfid rfid)
    {
        return rfidMapper.selectRfidList(rfid);
    }

    @Override
    public List<Rfid> selectInfo(Rfid rfid) {
        DateTime policeTime = DateUtil.offsetDay(new Date(), -365);
        rfid.setPoliceTime(policeTime);
        return rfidMapper.selectInfo(rfid);
    }

    @Override
    public List<Rfid> selectOnline(Rfid rfid) {
        return rfidMapper.selectOnline(rfid);
    }
    @Override
    public List<Rfid> selectOffline(Rfid rfid) {
        return rfidMapper.selectOffline(rfid);
    }

    /**
     * 新增rfid记录
     *
     * @param rfid rfid记录
     * @return 结果
     */
    @Override
    public int insertRfid(Rfid rfid)
    {
        rfid.setCreateTime(DateUtils.getNowDate());
        return rfidMapper.insertRfid(rfid);
    }

    /**
     * 修改rfid记录
     *
     * @param rfid rfid记录
     * @return 结果
     */
    @Override
    public int updateRfid(Rfid rfid)
    {
        rfid.setUpdateTime(DateUtils.getNowDate());
        return rfidMapper.updateRfid(rfid);
    }

    /**
     * 批量删除rfid记录
     *
     * @param ids 需要删除的rfid记录主键
     * @return 结果
     */
    @Override
    public int deleteRfidByIds(Long[] ids)
    {
        return rfidMapper.deleteRfidByIds(ids);
    }

    /**
     * 删除rfid记录信息
     *
     * @param id rfid记录主键
     * @return 结果
     */
    @Override
    public int deleteRfidById(Long id)
    {
        return rfidMapper.deleteRfidById(id);
    }

    @Override
    public AjaxResult sievePlatDetectionConfig(Integer deviceId, List<String> deviceNum,DetectionStatusEnum detectionStatus) {
        LambdaUpdateWrapper<Rfid> updateWrapper = new LambdaUpdateWrapper<>();
        updateWrapper.set(Rfid::getDetectionStatus,detectionStatus.getCode());
        updateWrapper.eq(Rfid::getDeviceId,deviceId);
        updateWrapper.in(Rfid::getDeviceNum,deviceNum);
        boolean update = update(updateWrapper);
        return AjaxResult.success(update);
    }
}
